// 购物车模块
import {ref} from 'vue'
import { defineStore } from "pinia"; 
import { useUserInfo } from "./user.js";
import {addCartAPI,getCartListAPI,deleteCartAPI} from '@/api/cart'
export const useCartStore=defineStore('cart',()=>{
    const userStore=useUserInfo()
    const isLogin=userStore.userInfo.token
    const cartList=ref([])
    // 获取最新购物车列表
    const getCartList=async ()=>{
        const res= await getCartListAPI()
         cartList.value=res.data.result
    }
    const addCart=async (obj)=>{
        // 已添加过的商品 count+1
        if(isLogin)
        {   
            const {skuId,count} =obj
            await addCartAPI({skuId,count})
            getCartList()
        }
        else{
        const item=cartList.value.find(item=>item.skuId===obj.skuId)
        if(item)
        {
            item.count+=obj.count
        }
        else
        {
            // 未添加过的商品 添加到购物车
            cartList.value.push(obj)
        
        }
        }
    }
    const delCart=async (id)=>{
        if(isLogin)
        {
            await deleteCartAPI([id])
            getCartList()
        }
        else{
            cartList.value=cartList.value.filter(item=>item.skuId!==id)
        }
    }
    // 清除购物车
    const clearCart=()=>{
        cartList.value=[]
    }
    // 计算总数量
    const computedTotalCount=()=>{
        return cartList.value.reduce((sum,item)=>sum+item.count,0)
    }
    // 计算总价钱
    const computedTotalPrice=()=>{
        return cartList.value.reduce((sum,item)=>sum+item.count*item.price,0)
    }
    // 计算选择的元素的总价
    const computedSelectTotalPrice=()=>{
        return cartList.value.reduce((sum,item)=>sum+item.count*item.price*(item.selected?1:0),0)
    }
    // 计算选中的元素数量
    const computedSelectCount=()=>{
        return cartList.value.reduce((sum,item)=>sum+(item.selected?item.count:0),0)
    }
    // 全选或全部不选
    const checkAll=(selected)=>{
        console.log(selected);
        cartList.value.forEach(item=>item.selected=selected)
    }
    // 判断是否全选
    const isCheckAll=()=>{
        return cartList.value.every(item=>item.selected)
    }

    

    return {cartList,getCartList,clearCart,addCart,delCart,computedTotalPrice,computedTotalCount,computedSelectTotalPrice,computedSelectCount,checkAll,isCheckAll}
},
{persist:true}
)